package geeks.web;

import geeks.excepcion.DAOExcepcion;
import geeks.modelo.Persona;
import geeks.negocio.GestionPersonas;
import geeks.negocio.GestionRol;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class ManttoUsuariosController {
	
	@RequestMapping(value = "/manttoUsuarios")	
	protected ModelAndView listarUsuarios(HttpServletRequest request,
			HttpServletResponse response) throws Exception {

		GestionPersonas neg = new GestionPersonas();
		
		try {
			int accion = (request.getParameter("v").toString() == null) ? 0 : (Integer.parseInt(request.getParameter("v")));

			switch (accion){
				case 1:
					return new ModelAndView("registroUsuario");
				case 2:					
					int id = Integer.parseInt(request.getParameter("id"));
					return new ModelAndView("actualizarUsuario", "PERSONA", neg.obtener(id));
			}			
			
		} catch (Exception e) {
			return new ModelAndView("mantenerUsuarios", "LISTA", neg.listarPersonas());
		}
		
		return new ModelAndView("mantenerUsuarios", "LISTA", neg.listarPersonas());
	}
	
	@RequestMapping(value = "/buscarUsuarios", method = RequestMethod.POST)	
	protected ModelAndView buscarUsuarios(HttpServletRequest request,
			HttpServletResponse response) throws Exception {

		GestionPersonas neg = new GestionPersonas();
		String palabra = "";
		
		try {
			if(request.getParameter("txtPalabra") != null)
				palabra = request.getParameter("txtPalabra");

			request.setAttribute("PALABRA", palabra);
		} catch (Exception e) {			
			return new ModelAndView("mantenerUsuarios", "LISTA", neg.listarPersonas(palabra));
		}
		
		return new ModelAndView("mantenerUsuarios", "LISTA", neg.listarPersonas(palabra));
	}
	
	@RequestMapping(value = "/registrarUsuario", method = RequestMethod.POST)	
	protected ModelAndView registrarUsuario(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		
		Persona obj = new Persona();
		
		obj.setNombre(request.getParameter("txtNombre"));
		obj.setApePaterno(request.getParameter("txtApePaterno"));
		obj.setApeMaterno(request.getParameter("txtApeMaterno"));
		obj.setSexo(request.getParameter("rbnSexo"));
		obj.setTipoDocumento(request.getParameter("cboTipoDoc"));
		obj.setNumDocumento(request.getParameter("txtNroDoc"));
		obj.setCelular(request.getParameter("txtCelular"));
		obj.setEmail(request.getParameter("txtEmail"));
		obj.setContrasena(request.getParameter("txtContrasena"));
		obj.setIdCentroFormacion(Integer.parseInt(request.getParameter("cboCentro")));
		
		GestionRol rol = new GestionRol();
		obj.setRol(rol.buscarRol(Integer.parseInt(request.getParameter("cboRol"))));
		
		GestionPersonas objNeg = new GestionPersonas();
		
		try {
			Persona objPersona = objNeg.insertarPersona(obj);
			
			if(objPersona != null){
				request.setAttribute("RESULTADO", "El usuario \"" + obj.getNombre() + " " + obj.getApePaterno() +"\", fue registrado correctamente.");
				return new ModelAndView("registroUsuario");
			} else {
				throw new Exception("Debe completar todos los campos correctamente.");
			}			
		} catch (DAOExcepcion e) {
	        request.setAttribute("PERSONA", obj);
	        return new ModelAndView("registroUsuario", "ERROR", e.getMessage());			
		} catch (Exception e) {
			request.setAttribute("PERSONA", obj);
			return new ModelAndView("registroUsuario", "ERROR", e.getMessage());
		}			
		
	}
	
	@RequestMapping(value = "/actualizarUsuario", method = RequestMethod.POST)	
	protected ModelAndView actualizarUsuario(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
				
		Persona obj = new Persona();
		
		obj.setIdPersona(Integer.parseInt(request.getParameter("txtCodigo")));
		obj.setNombre(request.getParameter("txtNombre"));
		obj.setApePaterno(request.getParameter("txtApePaterno"));
		obj.setApeMaterno(request.getParameter("txtApeMaterno"));
		obj.setSexo(request.getParameter("rbnSexo"));
		obj.setTipoDocumento(request.getParameter("cboTipoDoc"));
		obj.setNumDocumento(request.getParameter("txtNroDoc"));
		obj.setCelular(request.getParameter("txtCelular"));
		obj.setEmail(request.getParameter("txtEmail"));
		obj.setContrasena(request.getParameter("txtContrasena"));
		obj.setIdCentroFormacion(Integer.parseInt(request.getParameter("cboCentro")));
		
		GestionRol rol = new GestionRol();
		obj.setRol(rol.buscarRol(Integer.parseInt(request.getParameter("cboRol"))));
		
		GestionPersonas objNeg = new GestionPersonas();
		
		try {
			Persona objPersona = objNeg.actualizarPersona(obj);

			if(objPersona != null){
				request.setAttribute("RESULTADO", "El usuario \"" + obj.getNombre() + " " + obj.getApePaterno() +"\" fue modificado correctamente.");
				return new ModelAndView("actualizarUsuario", "PERSONA", objPersona);
			} else {
				throw new Exception("Error al actualizar los datos del usuario \"" + obj.getNombre() + " " + obj.getApePaterno() +"\".\nDebe completar todos los campos correctamente.");
			}			
		} catch (DAOExcepcion e) {	
			return new ModelAndView("mantenerUsuarios", "ERROR", e.getMessage());			
		} catch (NullPointerException e) {	
			return new ModelAndView("mantenerUsuarios", "ERROR", e.getMessage());
		} catch (Exception e) {	
			return new ModelAndView("mantenerUsuarios", "ERROR", e.getMessage());
		}			
	}
		
	@RequestMapping(value = "/eliminarUsuario", method = RequestMethod.GET)	
	protected ModelAndView eliminarUsuario(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
				
		int id = Integer.parseInt(request.getParameter("id").trim());
		
		GestionPersonas objNeg = new GestionPersonas();
		Persona obj = objNeg.obtener(id);
		
		try {
			int result = objNeg.eliminarPersona(id);

			if(result != 0){
				request.setAttribute("RESULTADO", "El usuario \"" + obj.getNombre() + " " + obj.getApePaterno() +"\" fue eliminado correctamente.");
				return new ModelAndView("mantenerUsuarios", "LISTA", objNeg.listarPersonas());
			} else {
				throw new Exception("Error al eliminar usuario \"" + obj.getNombre() + " " + obj.getApePaterno() +"\".");
			}			
		} catch (DAOExcepcion e) {	
			return new ModelAndView("mantenerUsuarios", "ERROR", e.getMessage());			
		} catch (Exception e) {	
			return new ModelAndView("mantenerUsuarios", "ERROR", e.getMessage());
		}		
	}
	
}
